﻿ /*
 * Разработчик: Коледа Андрей
 * Дата: 20.01.2011
 * Время: 10:56
 * Email: koleda.andrey@gmail.com
 */
using System;
using System.Collections.Generic;
using FastTravel.DataAccess.Base;
using FastTravel.DataAccess.Interface;
using FastTravel.DB;
using StructureMap;

namespace FastTravel.BusinessLogic
{
/// <summary>
	/// Основной менеджер управления сущностями
	/// </summary>
	public static class BusinessLogicManager
	{
		/// <summary>
		/// Инициализация
		/// </summary>
		public static void Initialize()
		{
			// Подключение перехвата
			ObjectFactory.Initialize(
				x =>
				{
					x.ForRequestedType<IUnitOfWorkFactory>().TheDefaultIsConcreteType<EFUnitOfWorkFactory>();
					x.ForRequestedType(typeof(IRepository<>)).TheDefaultIsConcreteType(typeof(EFRepository<>));
				}
			);

			// Указываем для фабрики UnitOfWork какой контекст использовать
			EFUnitOfWorkFactory.SetObjectContext(() => new FastTravelModelContainer());
		}

		/// <summary>
		/// Сохранение в БД
		/// </summary>
		public static void Commit()
		{
			UnitOfWork.Commit();
		}

		/// <summary>
		/// Безопасное сохранение в БД
		/// </summary>
		/// <returns></returns>
		public static bool TryCommit()
		{
			try
			{
				UnitOfWork.Commit();
				return true;
			}
			catch (Exception e)
			{
				return false;
			}
		}

		/// <summary>
		/// Разрушение текущего UnitOfWork
		/// </summary>
		public static void Dispose()
		{
			UnitOfWork.Current.Dispose();
		}
	}

}